home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1986-11-30 | 4.5 KB | 158 lines |
- 100 REM INDEXMAR Program
- 110 REM Forms the Marriages Index
- 120 REM By: Melvin O. Duke. Last Updated 2 February 1986.
- 200 REM Screen Definitions
- 210 WIDTH "scrn:", 80
- 220 SCREEN S1,S2,S3,S4
- 600 REM Titles
- 610 TITLE$ = "Prepare the Marriages Index"
- 620 TITLE$ = TITLE$ + " ON DISPLAY"
- 700 REM Terminate if not called from the Menu
- 710 IF DD.MENU$ <> "" THEN 770
- 720 COLOR 7,0 : KEY ON : CLS : LOCATE 15,1
- 730 PRINT "Cannot run the"
- 740 PRINT TITLE$
- 750 PRINT "Program, unless selected from the MENU"
- 760 END
- 770 REM OK
- 900 REM Dimension Statements
- 910 DIM REC.NO(2*MAX.MAR), PERS.ID(2*MAX.MAR), M.DATE(2*MAX.MAR)
- 1000 REM Produce the first screen
- 1010 KEY ON : CLS : KEY OFF
- 1020 REM Draw the outer double box
- 1030 R1 = 1 : C1 = 1 : R2 = 24 : C2 = 79 : GOSUB 1300
- 1040 REM Find the title location
- 1050 TITLE.POS = 40 - INT(LEN(TITLE$)/2)
- 1060 REM Draw the title box
- 1070 R1=3:C1=TITLE.POS-2:R2=6:C2=TITLE.POS+LEN(TITLE$)+1:GOSUB 1500
- 1080 REM Print the title
- 1090 LOCATE 4,TITLE.POS : PRINT TITLE$
- 1100 LOCATE 5,40-INT(LEN(VERSION$)/2) : PRINT VERSION$;
- 1230 REM Draw the Copyright box
- 1240 R1 = 19 : C1 = 21 : R2 = 22 : C2 = 59 : GOSUB 1300
- 1250 REM Print the Copyright
- 1260 LOCATE 20,40-INT(LEN(COPY1$)/2) : PRINT COPY1$;
- 1270 LOCATE 21,40-INT(LEN(COPY2$)/2) : PRINT COPY2$;
- 1280 GOTO 1700
- 1300 REM subroutine to print a double box
- 1310 COLOR P
- 1320 FOR I = R1 + 1 TO R2 - 1
- 1330 LOCATE I, C1 : PRINT CHR$(186);
- 1340 LOCATE I, C2 : PRINT CHR$(186);
- 1350 NEXT I
- 1360 FOR J = C1 + 1 TO C2 - 1
- 1370 LOCATE R1, J : PRINT CHR$(205);
- 1380 LOCATE R2, J : PRINT CHR$(205);
- 1390 NEXT J
- 1400 LOCATE R1, C1 : PRINT CHR$(201);
- 1410 LOCATE R1, C2 : PRINT CHR$(187);
- 1420 LOCATE R2, C1 : PRINT CHR$(200);
- 1430 LOCATE R2, C2 : PRINT CHR$(188);
- 1440 COLOR W
- 1450 RETURN
- 1500 REM subroutine to print a single box
- 1510 COLOR B
- 1520 FOR I = R1 + 1 TO R2 - 1
- 1530 LOCATE I, C1 : PRINT CHR$(179);
- 1540 LOCATE I, C2 : PRINT CHR$(179);
- 1550 NEXT I
- 1560 FOR J = C1 + 1 TO C2 - 1
- 1570 LOCATE R1, J : PRINT CHR$(196);
- 1580 LOCATE R2, J : PRINT CHR$(196);
- 1590 NEXT J
- 1600 LOCATE R1, C1 : PRINT CHR$(218);
- 1610 LOCATE R1, C2 : PRINT CHR$(191);
- 1620 LOCATE R2, C1 : PRINT CHR$(192);
- 1630 LOCATE R2, C2 : PRINT CHR$(217);
- 1640 COLOR W
- 1650 RETURN
- 1700 REM ask user to press a key to continue
- 1710 LOCATE 25,1
- 1720 PRINT "Have Data Diskette(s) in Place, then Press any key to continue.";
- 1730 K$ = INKEY$ : IF K$ = "" THEN 1730
- 1740 KEY ON : CLS : KEY OFF
- 2000 REM INDEXMAR Program Starts Here
- 2010 OPEN DD.MARR$+"marrfile" AS #2 LEN = 128
- 2020 FIELD 2, 5 AS M1$, 5 AS M2$, 5 AS M3$, 5 AS M4$, 11 AS M5$, 18 AS M6$, 16 AS M7$, 16 AS M8$, 45 AS M9$
- 2030 REM Read all records, and create the index.
- 2040 KEY ON : CLS : KEY OFF
- 2050 C = 0
- 2060 FOR I = 1 TO MAX.MAR
- 2070 GET #2, I
- 2080 LOCATE 15,1 : PRINT "Processing Marriage Record:"; I;
- 2090 REM Extract information from the file
- 2100 T1 = CVS(M1$) 'Marriage-id
- 2110 IF T1 < 0 THEN 2440
- 2120 T2 = CVS(M2$) 'Husband-id
- 2130 T3 = CVS(M3$) 'Wife-id
- 2140 T5$ = M5$ 'Marriage-date as dd mmm yyyy
- 2150 IF T5$ = " " THEN MD = 0 : GOTO 2320
- 2160 REM convert Birthdate
- 2170 MD = VAL(RIGHT$(T5$,4))*10000
- 2180 MO$ = MID$(T5$,4,3)
- 2190 IF MO$ = "Jan" THEN MD = MD + 100 : GOTO 2310
- 2200 IF MO$ = "Feb" THEN MD = MD + 200 : GOTO 2310
- 2210 IF MO$ = "Mar" THEN MD = MD + 300 : GOTO 2310
- 2220 IF MO$ = "Apr" THEN MD = MD + 400 : GOTO 2310
- 2230 IF MO$ = "May" THEN MD = MD + 500 : GOTO 2310
- 2240 IF MO$ = "Jun" THEN MD = MD + 600 : GOTO 2310
- 2250 IF MO$ = "Jul" THEN MD = MD + 700 : GOTO 2310
- 2260 IF MO$ = "Aug" THEN MD = MD + 800 : GOTO 2310
- 2270 IF MO$ = "Sep" THEN MD = MD + 900 : GOTO 2310
- 2280 IF MO$ = "Oct" THEN MD = MD + 1000 : GOTO 2310
- 2290 IF MO$ = "Nov" THEN MD = MD + 1100 : GOTO 2310
- 2300 IF MO$ = "Dec" THEN MD = MD + 1200 : GOTO 2310
- 2310 MD = MD + VAL(LEFT$(T5$,2))
- 2320 REM create the husband's index record
- 2330 IF T2 = 0 THEN 2380 'skip if zero
- 2340 C = C + 1
- 2350 REC.NO(C) = T1
- 2360 PERS.ID(C) = T2
- 2370 M.DATE(C) = MD
- 2380 REM create the wife's index record
- 2390 IF T3 = 0 THEN 2440 'skip if zero
- 2400 C = C + 1
- 2410 REC.NO(C) = T1
- 2420 PERS.ID(C) = T3
- 2430 M.DATE(C) = MD
- 2440 NEXT I
- 2450 CLOSE #2
- 2460 LOCATE 18,1 : PRINT "There are:"; C; "Index Records";
- 2470 REM Sort by Person-id
- 2480 FOR I = 1 TO 6
- 2490 B(I) = B(I-1)*4+1
- 2500 IF B(I) <= C/2 THEN K1 = I
- 2510 NEXT I
- 2520 B(K1) = INT(C/5)+1
- 2530 B(1) = 1
- 2540 LOCATE 22,1 : PRINT SPACE$(79)
- 2550 LOCATE 22,1 : PRINT "Processing Persons"
- 2560 FOR I = K1 TO 1 STEP -1
- 2570 LOCATE 23,1 : PRINT "For Group I:";I;
- 2580 K1 = B(I)
- 2590 FOR J = K1 TO C
- 2600 LOCATE 23,20 : PRINT "J:";J;
- 2610 MTEMP1 = M.DATE(J) : TEMP2 = REC.NO(J) : TEMP3 = PERS.ID(J)
- 2620 FOR K = J-K1 TO 0 STEP -K1
- 2630 LOCATE 23,30 : PRINT "K:";K, "Freespace:";FRE(0)
- 2640 IF TEMP3 > PERS.ID(K) THEN 2680
- 2650 IF TEMP3 = PERS.ID(K) AND MTEMP1 > M.DATE(K) THEN 2680
- 2660 M.DATE(K+K1)=M.DATE(K):REC.NO(K+K1)=REC.NO(K):PERS.ID(K+K1)=PERS.ID(K)
- 2670 NEXT K
- 2680 M.DATE(K+K1)=MTEMP1 : REC.NO(K+K1)=TEMP2 : PERS.ID(K+K1)=TEMP3
- 2690 NEXT J
- 2700 NEXT I
- 2710 REM Write the Marriage Index
- 2720 KEY ON : CLS : KEY OFF : LOCATE 21,1
- 2730 PRINT "Writing the Marriages Index"
- 2740 OPEN DD.MARIDX$+"mindex" FOR OUTPUT AS #3
- 2750 WRITE #3,C
- 2760 FOR I = 1 TO C
- 2770 WRITE #3, PERS.ID(I)
- 2780 WRITE #3, REC.NO(I)
- 2790 NEXT I
- 2800 CLOSE #3
- 2810 KEY ON : CLS : KEY OFF : LOCATE 21,1
- 2820 PRINT "End of Program"
- 2830 RUN DD.MENU$+"menu"
-